In this notebook, we conducted extra analyses (not reported) for Study 4: Confirmatory work with undergraduates.
source("../../scripts_general/dependencies.R")
source("../../scripts_general/custom_funs.R")
source("../../scripts_general/var_recode_contrast.R")
source("../scripts_s4/s4_var_groups.R")
source("../../scripts_general/data_load.R")
Parsed with column specification:
cols(
.default = col_double(),
date = [34mcol_date(format = "")[39m,
researcher = [31mcol_character()[39m,
country = [31mcol_character()[39m,
site = [31mcol_character()[39m,
religion = [31mcol_character()[39m,
subject_gender = [31mcol_character()[39m,
subject_job = [31mcol_character()[39m,
subject_schedule = [31mcol_character()[39m,
subject_livedhere = [31mcol_character()[39m,
subject_lang = [31mcol_character()[39m,
subject_marital = [31mcol_character()[39m,
subject_hs = [31mcol_character()[39m,
subject_liveswith = [31mcol_character()[39m,
servicesperweek = [31mcol_character()[39m,
study = [31mcol_character()[39m
)
See spec(...) for full column specifications.
Parsed with column specification:
cols(
.default = col_double(),
date = [34mcol_date(format = "")[39m,
researcher = [31mcol_character()[39m,
country = [31mcol_character()[39m,
quad = [31mcol_character()[39m,
subject_gender = [31mcol_character()[39m,
subject_job = [31mcol_character()[39m,
subject_schedule = [31mcol_character()[39m,
subject_livedhere = [31mcol_character()[39m,
subject_lang = [31mcol_character()[39m,
subject_marital = [31mcol_character()[39m,
subject_hs = [31mcol_character()[39m,
subject_school = [31mcol_character()[39m,
subject_liveswith = [31mcol_character()[39m,
servicesperweek = [31mcol_character()[39m,
godexpviaawe_freq = [31mcol_character()[39m,
sleephabit = [31mcol_character()[39m,
researcher_date = [34mcol_date(format = "")[39m,
researcher_notes = [31mcol_character()[39m,
site = [31mcol_character()[39m,
religion = [31mcol_character()[39m
)
See spec(...) for full column specifications.
Parsed with column specification:
cols(
.default = col_double(),
ctry = [31mcol_character()[39m,
wher = [31mcol_character()[39m,
recr = [31mcol_character()[39m,
whoc = [31mcol_character()[39m
)
See spec(...) for full column specifications.
Parsed with column specification:
cols(
.default = col_double(),
ctry = [31mcol_character()[39m,
wher = [31mcol_character()[39m,
recr = [31mcol_character()[39m,
whoc = [31mcol_character()[39m,
demo_chur = [31mcol_character()[39m,
demo_ethn = [31mcol_character()[39m,
demo_maj = [31mcol_character()[39m,
demo_pocc = [31mcol_character()[39m,
demo_rlgn = [31mcol_character()[39m,
demo_sex = [31mcol_character()[39m
)
See spec(...) for full column specifications.
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
.default = col_character(),
X1 = [32mcol_double()[39m,
epi_subj = [32mcol_double()[39m,
epi_demo_age = [32mcol_double()[39m,
epi_demo_ses_num = [32mcol_double()[39m,
epi_demo_howr_num = [32mcol_double()[39m,
epi_demo_affr_num = [32mcol_double()[39m,
epi_demo_tung_num = [32mcol_double()[39m,
epi_demo_ytng_num = [32mcol_double()[39m,
epi_demo_affr_cat = [33mcol_logical()[39m,
epi_demo_tung_cat = [33mcol_logical()[39m,
epi_demo_ytng_cat = [33mcol_logical()[39m,
epi_version = [32mcol_double()[39m,
epi_charc = [32mcol_double()[39m
)
See spec(...) for full column specifications.
2 parsing failures.
row col expected actual file
1025 epi_charc a double Unclear '../../study3/data/d_demo.csv'
1027 epi_charc a double Unclear '../../study3/data/d_demo.csv'
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
X1 = [32mcol_double()[39m,
epi_ctry = [31mcol_character()[39m,
epi_subj = [32mcol_double()[39m,
score = [32mcol_double()[39m
)
Joining, by = c("epi_ctry", "epi_subj")
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
X1 = [32mcol_double()[39m,
epi_ctry = [31mcol_character()[39m,
epi_subj = [32mcol_double()[39m,
score = [32mcol_double()[39m
)
Joining, by = c("epi_ctry", "epi_subj")
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
X1 = [32mcol_double()[39m,
epi_ctry = [31mcol_character()[39m,
epi_subj = [32mcol_double()[39m,
question = [31mcol_character()[39m,
response = [32mcol_double()[39m,
order = [32mcol_double()[39m,
question_text = [31mcol_character()[39m
)
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
X1 = [32mcol_double()[39m,
epi_ctry = [31mcol_character()[39m,
epi_subj = [32mcol_double()[39m,
question = [31mcol_character()[39m,
response = [32mcol_double()[39m,
order = [32mcol_double()[39m,
question_text = [31mcol_character()[39m
)
Joining, by = c("epi_ctry", "epi_subj", "question", "response", "order", "question_text")
Joining, by = c("epi_ctry", "epi_subj")
Column `epi_ctry` joining character vector and factor, coercing into character vectorJoining, by = "epi_subj"
Missing column names filled in: 'X1' [1]Parsed with column specification:
cols(
.default = col_double(),
p7_ctry = [31mcol_character()[39m,
p7_abs_check = [31mcol_character()[39m,
p7_dse_check = [31mcol_character()[39m,
p7_se_check = [31mcol_character()[39m,
p7_unev_check = [31mcol_character()[39m,
p7_exsen_check = [31mcol_character()[39m,
p7_por_check = [31mcol_character()[39m,
p7_mm_check = [31mcol_character()[39m,
p7_dem_sex = [31mcol_character()[39m,
p7_dem_pocc = [31mcol_character()[39m,
p7_dem_major = [31mcol_character()[39m,
p7_dem_ethnicity = [31mcol_character()[39m,
p7_dem_rur.urb = [31mcol_character()[39m,
p7_dem_affrd.basics = [31mcol_character()[39m,
p7_dem_religion = [31mcol_character()[39m,
p7_dem_church = [31mcol_character()[39m,
p7_dem_holy.tung.gif = [31mcol_character()[39m,
p7_abs_child.exp_cat = [33mcol_logical()[39m,
p7_abs_poetic_cat = [33mcol_logical()[39m,
p7_abs_tv.real_cat = [33mcol_logical()[39m
# ... with 162 more columns
)
See spec(...) for full column specifications.
Joining, by = c("p7_ctry", "p7_subj", "question", "response", "scale")
Joining, by = c("p7_ctry", "p7_subj", "question", "response", "scale")
Joining, by = c("p7_ctry", "p7_subj", "question", "response", "scale")
Joining, by = c("p7_ctry", "p7_subj", "question", "response", "scale")
Joining, by = c("p7_ctry", "p7_subj", "question", "response", "scale")
Joining, by = c("p7_ctry", "p7_subj", "question", "response", "scale")
Joining, by = c("p7_ctry", "p7_subj", "question", "response", "scale")
Joining, by = c("p7_ctry", "p7_subj", "question", "response", "scale")
Joining, by = c("study", "p7_ctry", "p7_subj", "abs_score", "cog_score", "ctl_score", "dse_score", "hall_score", "para_score", "por_score", "pv_score", "spev_score")
Joining, by = c("study", "p7_ctry", "p7_subj", "abs_score", "cog_score", "ctl_score", "dse_score", "hall_score", "para_score", "por_score", "pv_score", "spev_score")
object 'd4_study' not found
d4_long <- d4 %>%
select(p7_ctry, p7_subj,
por_score_std, pv_score_std, abs_score_std, dse_score_std, spev_score_std) %>%
gather(spirit_scale, spirit_score_std,
c(dse_score_std, spev_score_std)) %>%
mutate(spirit_scale = factor(spirit_scale,
levels = c("dse_score_std", "spev_score_std")))
contrasts(d4_long$p7_ctry) <- contrasts_country; contrasts(d4_long$p7_ctry)
_gh _th _ch _vt
US -1 -1 -1 -1
Ghana 1 0 0 0
Thailand 0 1 0 0
China 0 0 1 0
Vanuatu 0 0 0 1
contrasts(d4_long$spirit_scale) <- cbind("_spev" = c(-1, 1)); contrasts(d4_long$spirit_scale)
_spev
dse_score_std -1
spev_score_std 1
Attempting to fit more complex random effects structures
# more complex random effects structures: NOT REPORTED
# note: never looking for intercepts (random or fixed) by scale, because standardized
r1a <- lmer(spirit_score_std ~ 1 + abs_score_std +
(1 | p7_ctry/p7_subj) +
(0 + abs_score_std | p7_ctry) +
(0 + abs_score_std | spirit_scale),
data = d4_long) # singular
boundary (singular) fit: see ?isSingular
r1b <- lmer(spirit_score_std ~ 1 + abs_score_std +
(1 | p7_ctry/p7_subj) +
(0 + abs_score_std | p7_ctry),
data = d4_long) # singular
boundary (singular) fit: see ?isSingular
r1c <- lmer(spirit_score_std ~ 1 + abs_score_std +
(1 | p7_ctry/p7_subj) +
(0 + abs_score_std | spirit_scale),
data = d4_long) # failed to converge
Model failed to converge with max|grad| = 0.0024005 (tol = 0.002, component 1)
r1d <- lmer(spirit_score_std ~ abs_score_std +
(0 + abs_score_std | p7_ctry) +
(0 + abs_score_std | spirit_scale),
data = d4_long) # fine, but doesn't reflect repeated measures design
r1e <- lmer(spirit_score_std ~ 1 + abs_score_std +
(1 + abs_score_std | p7_ctry), # singular
# (1 + abs_score_std || p7_ctry), # failed to converge
data = d4_long) # singular
boundary (singular) fit: see ?isSingular
r1f <- lmer(spirit_score_std ~ 1 + abs_score_std +
(1 | p7_ctry/p7_subj),
data = d4_long) # fine, but doesn't account for two scales
r1g <- lmer(spirit_score_std ~ 1 + abs_score_std +
(0 + abs_score_std | spirit_scale),
data = d4_long) # overparameterized: only 1 df for testing main effect of abs_score
r1h <- lmer(spirit_score_std ~ 1 + abs_score_std +
(1 + abs_score_std | p7_ctry) + (1 | p7_subj),
data = d4_long) # singular
boundary (singular) fit: see ?isSingular
r1i_dse <- lmer(dse_score_std ~ abs_score_std +
(1 + abs_score_std | p7_ctry), d4) # singular
boundary (singular) fit: see ?isSingular
r1i_spev <- lmer(spev_score_std ~ abs_score_std +
(1 + abs_score_std | p7_ctry), d4) # singular
boundary (singular) fit: see ?isSingular
Primary analysis
Daily Spiritual Experiences
r1_dse <- lmer(dse_score_std ~ abs_score_std +
(1 + abs_score_std || p7_ctry), d4)
boundary (singular) fit: see ?isSingular
summary(r1_dse)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: dse_score_std ~ abs_score_std + (1 + abs_score_std || p7_ctry)
Data: d4
REML criterion at convergence: 1083.6
Scaled residuals:
Min 1Q Median 3Q Max
-2.6041 -0.6292 -0.0650 0.5742 3.4862
Random effects:
Groups Name Variance Std.Dev.
p7_ctry (Intercept) 0.6440 0.8025
p7_ctry.1 abs_score_std 0.0000 0.0000
Residual 0.4736 0.6882
Number of obs: 505, groups: p7_ctry, 5
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 0.01437 0.36018 3.99443 0.04 0.97
abs_score_std 0.17248 0.03218 499.68843 5.36 1.28e-07 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr)
abs_scr_std -0.001
convergence code: 0
boundary (singular) fit: see ?isSingular
rsquared(r1_dse)
regtab_fun(r1_dse) %>% regtab_style_fun(row_emph = 2)
| Parameter |
β |
Std. Err. |
df |
t |
p |
|
| Intercept |
0.01 |
0.36 |
3.99 |
0.04 |
0.970 |
|
| Absorption |
0.17 |
0.03 |
499.69 |
5.36 |
<0.001 |
*** |
# regtab_ran_fun(r1_dse) %>%
# mutate(Group = case_when(is.na(Group) ~ "Participant, nested within p7_ctry",
# TRUE ~ as.character(Group)),
# Group = factor(Group, levels = c("p7_ctry",
# "Participant, nested within p7_ctry",
# "Residual"))) %>%
# arrange(Group) %>%
# kable(align = "r") %>%
# kable_styling(font_size = 16) %>%
# row_spec(1:nrow(regtab_ran_fun(r1_dse)), color = "black")
Spiritual Events
r1_spev <- lmer(spev_score_std ~ abs_score_std +
(1 + abs_score_std || p7_ctry), d4)
boundary (singular) fit: see ?isSingular
summary(r1_spev)
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: spev_score_std ~ abs_score_std + (1 + abs_score_std || p7_ctry)
Data: d4
REML criterion at convergence: 1220.3
Scaled residuals:
Min 1Q Median 3Q Max
-2.7488 -0.6177 -0.1630 0.4747 4.1935
Random effects:
Groups Name Variance Std.Dev.
p7_ctry (Intercept) 0.3702 0.6084
p7_ctry.1 abs_score_std 0.0000 0.0000
Residual 0.6316 0.7947
Number of obs: 503, groups: p7_ctry, 5
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 0.01349 0.27440 3.99800 0.049 0.963
abs_score_std 0.26977 0.03718 498.46528 7.255 1.54e-12 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr)
abs_scr_std -0.002
convergence code: 0
boundary (singular) fit: see ?isSingular
rsquared(r1_spev)
regtab_fun(r1_spev) %>% regtab_style_fun(row_emph = 2)
| Parameter |
β |
Std. Err. |
df |
t |
p |
|
| Intercept |
0.01 |
0.27 |
4.00 |
0.05 |
0.963 |
|
| Absorption |
0.27 |
0.04 |
498.47 |
7.26 |
<0.001 |
*** |
# regtab_ran_fun(r1_spev) %>%
# mutate(Group = case_when(is.na(Group) ~ "Participant, nested within p7_ctry",
# TRUE ~ as.character(Group)),
# Group = factor(Group, levels = c("p7_ctry",
# "Participant, nested within p7_ctry",
# "Residual"))) %>%
# arrange(Group) %>%
# kable(align = "r") %>%
# kable_styling(font_size = 16) %>%
# row_spec(1:nrow(regtab_ran_fun(r1_spev)), color = "black")
p7_ctry as fixed effect
Daily Spiritual Experiences
r2_dse <- lm(dse_score_std ~ abs_score_std * p7_ctry, d4)
summary(r2_dse)
Call:
lm(formula = dse_score_std ~ abs_score_std * p7_ctry, data = d4)
Residuals:
Min 1Q Median 3Q Max
-1.79477 -0.42791 -0.04314 0.37472 2.40106
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.0316884 0.0324797 0.976 0.330
abs_score_std 0.1728380 0.0336262 5.140 3.96e-07 ***
p7_ctry_gh 0.8272131 0.0624265 13.251 < 2e-16 ***
p7_ctry_th -0.0455220 0.0672609 -0.677 0.499
p7_ctry_ch -1.1316594 0.0661378 -17.111 < 2e-16 ***
p7_ctry_vt 0.7225791 0.0667014 10.833 < 2e-16 ***
abs_score_std:p7_ctry_gh -0.0363167 0.0699995 -0.519 0.604
abs_score_std:p7_ctry_th 0.1126258 0.0703704 1.600 0.110
abs_score_std:p7_ctry_ch 0.0003628 0.0739211 0.005 0.996
abs_score_std:p7_ctry_vt -0.0945542 0.0655455 -1.443 0.150
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.6882 on 495 degrees of freedom
Multiple R-squared: 0.5348, Adjusted R-squared: 0.5264
F-statistic: 63.24 on 9 and 495 DF, p-value: < 2.2e-16
rsquared(r2_dse)
regtab_fun(r2_dse,
country_var1 = "p7_ctry_gh",
country_var2 = "p7_ctry_th",
country_var3 = "p7_ctry_ch",
country_var4 = "p7_ctry_vt") %>%
regtab_style_fun(row_emph = 2)
| Parameter |
β |
Std. Err. |
t |
p |
|
| Intercept |
0.03 |
0.03 |
0.98 |
0.330 |
|
| Absorption |
0.17 |
0.03 |
5.14 |
<0.001 |
*** |
| Country (Gh.) |
0.83 |
0.06 |
13.25 |
<0.001 |
*** |
| Country (Th.) |
-0.05 |
0.07 |
-0.68 |
0.499 |
|
| Country (Ch.) |
-1.13 |
0.07 |
-17.11 |
<0.001 |
*** |
| Country (Vt.) |
0.72 |
0.07 |
10.83 |
<0.001 |
*** |
| Absorption × Country (Gh.) |
-0.04 |
0.07 |
-0.52 |
0.604 |
|
| Absorption × Country (Th.) |
0.11 |
0.07 |
1.60 |
0.110 |
|
| Absorption × Country (Ch.) |
0.00 |
0.07 |
0.00 |
0.996 |
|
| Absorption × Country (Vt.) |
-0.09 |
0.07 |
-1.44 |
0.150 |
|
Spiritual Events
r2_spev <- lm(spev_score_std ~ abs_score_std * p7_ctry, d4)
summary(r2_spev)
Call:
lm(formula = spev_score_std ~ abs_score_std * p7_ctry, data = d4)
Residuals:
Min 1Q Median 3Q Max
-2.1858 -0.5031 -0.1084 0.3857 3.3345
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.023818 0.037640 0.633 0.527157
abs_score_std 0.264300 0.038985 6.780 3.45e-11 ***
p7_ctry_gh 0.808256 0.072548 11.141 < 2e-16 ***
p7_ctry_th -0.258221 0.077874 -3.316 0.000981 ***
p7_ctry_ch -0.756335 0.076656 -9.867 < 2e-16 ***
p7_ctry_vt 0.421307 0.077226 5.455 7.74e-08 ***
abs_score_std:p7_ctry_gh -0.017265 0.081107 -0.213 0.831520
abs_score_std:p7_ctry_th 0.045649 0.081481 0.560 0.575574
abs_score_std:p7_ctry_ch 0.003628 0.085972 0.042 0.966357
abs_score_std:p7_ctry_vt -0.079768 0.075899 -1.051 0.293783
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.7966 on 493 degrees of freedom
(2 observations deleted due to missingness)
Multiple R-squared: 0.3769, Adjusted R-squared: 0.3655
F-statistic: 33.13 on 9 and 493 DF, p-value: < 2.2e-16
rsquared(r2_spev)
regtab_fun(r2_spev,
country_var1 = "p7_ctry_gh",
country_var2 = "p7_ctry_th",
country_var3 = "p7_ctry_ch",
country_var4 = "p7_ctry_vt") %>%
regtab_style_fun(row_emph = 2)
| Parameter |
β |
Std. Err. |
t |
p |
|
| Intercept |
0.02 |
0.04 |
0.63 |
0.527 |
|
| Absorption |
0.26 |
0.04 |
6.78 |
<0.001 |
*** |
| Country (Gh.) |
0.81 |
0.07 |
11.14 |
<0.001 |
*** |
| Country (Th.) |
-0.26 |
0.08 |
-3.32 |
<0.001 |
*** |
| Country (Ch.) |
-0.76 |
0.08 |
-9.87 |
<0.001 |
*** |
| Country (Vt.) |
0.42 |
0.08 |
5.46 |
<0.001 |
*** |
| Absorption × Country (Gh.) |
-0.02 |
0.08 |
-0.21 |
0.832 |
|
| Absorption × Country (Th.) |
0.05 |
0.08 |
0.56 |
0.576 |
|
| Absorption × Country (Ch.) |
0.00 |
0.09 |
0.04 |
0.966 |
|
| Absorption × Country (Vt.) |
-0.08 |
0.08 |
-1.05 |
0.294 |
|
Porosity and absorption differentially predicting individual extraordinary experiences
d4_different <- d4 %>%
select(p7_ctry, p7_subj, por_score_std, pv_score_std, abs_score_std) %>%
full_join(d4_byquestion %>%
select(-scale) %>%
# standardize responses by question (collapsing across countries)
group_by(question) %>%
mutate(response = scale(response)) %>%
ungroup() %>%
spread(question, response) %>%
select(p7_subj, s4_var_dse, s4_var_spev, s4_var_hall, s4_var_para))
Joining, by = "p7_subj"
d4_different_cor <- d4_different %>%
select(-p7_ctry, -p7_subj) %>%
# unite(p7_ctry.p7_subj, p7_ctry, p7_subj, sep = "_") %>%
# column_to_rownames("p7_ctry.p7_subj") %>%
cor(use = "pairwise.complete") %>%
data.frame() %>%
rownames_to_column("var1") %>%
gather(var2, cor, -var1)
d4_different_cor2 <- d4_different_cor %>%
filter(grepl("score", var1),
!grepl("score", var2)) %>%
mutate(var1 = factor(
var1,
levels = c("por_score_std", "pv_score_std", "abs_score_std"),
labels = c("Porosity Scale", "Porosity Vignettes", "Absorption"))) %>%
left_join(d4_byquestion %>%
distinct(scale, question),
by = c("var2" = "question")) %>%
distinct() %>%
mutate(scale = factor(
scale,
levels = c("dse_score", "spev_score", "hall_score", "para_score"),
labels = c("Daily Spiritual Experiences\n(Underwood & Teresi, 2002)",
"Spiritual Events\n(novel measure)",
"Hallucinations\n(Morrison et al., 2000)",
"Paranormal\n(Thalborne & Delin, 1993)")),
var2_lab = factor(var2,
levels = c(s4_var_dse, s4_var_spev, s4_var_hall, s4_var_para),
labels = c(paste("Item", 1:length(s4_var_dse)),
paste("Item", 1:length(s4_var_spev)),
paste("Item", 1:length(s4_var_hall)),
paste("Item", 1:length(s4_var_para))))) %>%
rename(predictor = var1, experience = var2, experience_lab = var2_lab)
d4_different_cor_top4 <- d4_different_cor2 %>%
group_by(predictor) %>%
top_n(4, cor) %>%
arrange(predictor, desc(cor))
d4_different_cor_top4 %>% kable(digits = 2) %>% kable_styling() %>% collapse_rows(1)
| predictor |
experience |
cor |
scale |
experience_lab |
| Porosity Scale |
p7_dse_direct.love |
0.62 |
Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 9 |
| p7_dse_guided.daily |
0.61 |
Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 8 |
| p7_dse_lov.thru.othr |
0.60 |
Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 10 |
| p7_dse_spi.strength |
0.57 |
Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 4 |
| Porosity Vignettes |
p7_se_own.healing |
0.51 |
Spiritual Events
(novel measure) |
Item 22 |
| p7_dse_guided.daily |
0.50 |
Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 8 |
| p7_dse_direct.love |
0.49 |
Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 9 |
| p7_dse_lov.thru.othr |
0.48 |
Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 10 |
| Absorption |
p7_unev_no.ones.vox |
0.36 |
Hallucinations
(Morrison et al., 2000) |
Item 5 |
| p7_se_spnat.presence |
0.33 |
Spiritual Events
(novel measure) |
Item 12 |
| p7_exsen_dist.msg |
0.29 |
Paranormal
(Thalborne & Delin, 1993) |
Item 6 |
| p7_unev_voice.aloud |
0.29 |
Hallucinations
(Morrison et al., 2000) |
Item 1 |
d4_different_cor_top4_spev <- d4_different_cor2 %>%
filter(grepl("Spiritual Events", scale)) %>%
group_by(predictor) %>%
top_n(4, cor) %>%
arrange(predictor, desc(cor))
# d4_different_cor_top4_spev %>% kable(digits = 2) %>% kable_styling() %>% collapse_rows(1)
d4_different_cor_top4_dse <- d4_different_cor2 %>%
filter(grepl("Daily Spiritual Experiences", scale)) %>%
group_by(predictor) %>%
top_n(4, cor) %>%
arrange(predictor, desc(cor))
# d4_different_cor_top4_dse %>% kable(digits = 2) %>% kable_styling() %>% collapse_rows(1)
d4_different_cor_top4_hall <- d4_different_cor2 %>%
filter(grepl("Hallucinations", scale)) %>%
group_by(predictor) %>%
top_n(4, cor) %>%
arrange(predictor, desc(cor))
# d4_different_cor_top4_hall %>% kable(digits = 2) %>% kable_styling() %>% collapse_rows(1)
d4_different_cor_top4_para <- d4_different_cor2 %>%
filter(grepl("Paranormal", scale)) %>%
group_by(predictor) %>%
top_n(4, cor) %>%
arrange(predictor, desc(cor))
# d4_different_cor_top4_para %>% kable(digits = 2) %>% kable_styling() %>% collapse_rows(1)
d4_different_cor2 %>%
left_join(d4_different_cor_top4 %>% mutate(top4 = "bold")) %>%
mutate(top4 = case_when(is.na(top4) ~ "plain", TRUE ~ top4)) %>%
ggplot(aes(x = predictor, y = reorder(experience_lab, desc(experience_lab)),
fill = cor, label = format(round(cor, 2), nsmall = 2))) +
facet_grid(scale ~ ., scales = "free", space = "free") +
geom_tile(aes(size = top4),
color = "black", show.legend = T) +
geom_text(aes(fontface = top4),
size = 3) +
scale_fill_distiller(palette = "RdYlBu", limits = c(-1, 1),
guide = guide_colorbar(barwidth = 10, barheight = 0.5)) +
scale_size_manual(values = c(0.5, 0.05)) +
theme_minimal() +
theme(legend.position = "bottom") +
labs(x = "Predictor", y = "Experience Item", fill = "Pearson's r") +
guides(size = "none")
Joining, by = c("predictor", "experience", "cor", "scale", "experience_lab")

d4_different_cor2 %>%
select(scale, experience_lab, predictor, cor) %>%
spread(predictor, cor) %>%
rename(Scale = scale, Item = experience_lab) %>%
kable(digits = 2) %>%
kable_styling() # %>%
| Scale |
Item |
Porosity Scale |
Porosity Vignettes |
Absorption |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 1 |
0.55 |
0.44 |
0.10 |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 2 |
0.40 |
0.35 |
0.18 |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 3 |
0.52 |
0.43 |
0.07 |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 4 |
0.57 |
0.43 |
0.00 |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 5 |
0.51 |
0.41 |
0.00 |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 6 |
0.36 |
0.30 |
0.11 |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 7 |
0.55 |
0.42 |
0.09 |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 8 |
0.61 |
0.50 |
0.17 |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 9 |
0.62 |
0.49 |
0.15 |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 10 |
0.60 |
0.48 |
0.16 |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 11 |
0.54 |
0.37 |
0.21 |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 12 |
0.45 |
0.34 |
0.08 |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 13 |
0.19 |
0.17 |
0.19 |
| Daily Spiritual Experiences
(Underwood & Teresi, 2002) |
Item 14 |
0.38 |
0.30 |
0.14 |
| Spiritual Events
(novel measure) |
Item 1 |
0.44 |
0.43 |
0.20 |
| Spiritual Events
(novel measure) |
Item 2 |
0.45 |
0.40 |
0.18 |
| Spiritual Events
(novel measure) |
Item 3 |
0.56 |
0.46 |
0.22 |
| Spiritual Events
(novel measure) |
Item 4 |
0.41 |
0.36 |
0.14 |
| Spiritual Events
(novel measure) |
Item 5 |
0.47 |
0.42 |
0.25 |
| Spiritual Events
(novel measure) |
Item 6 |
0.37 |
0.41 |
0.18 |
| Spiritual Events
(novel measure) |
Item 7 |
0.33 |
0.36 |
0.09 |
| Spiritual Events
(novel measure) |
Item 8 |
0.37 |
0.40 |
0.10 |
| Spiritual Events
(novel measure) |
Item 9 |
0.43 |
0.36 |
0.16 |
| Spiritual Events
(novel measure) |
Item 10 |
0.47 |
0.41 |
0.21 |
| Spiritual Events
(novel measure) |
Item 11 |
0.37 |
0.32 |
0.27 |
| Spiritual Events
(novel measure) |
Item 12 |
0.26 |
0.28 |
0.33 |
| Spiritual Events
(novel measure) |
Item 13 |
0.38 |
0.39 |
0.18 |
| Spiritual Events
(novel measure) |
Item 14 |
0.40 |
0.37 |
0.13 |
| Spiritual Events
(novel measure) |
Item 15 |
0.44 |
0.39 |
0.16 |
| Spiritual Events
(novel measure) |
Item 16 |
0.15 |
0.24 |
0.18 |
| Spiritual Events
(novel measure) |
Item 17 |
0.33 |
0.39 |
0.16 |
| Spiritual Events
(novel measure) |
Item 18 |
0.17 |
0.17 |
0.23 |
| Spiritual Events
(novel measure) |
Item 19 |
0.35 |
0.35 |
0.13 |
| Spiritual Events
(novel measure) |
Item 20 |
0.39 |
0.43 |
0.13 |
| Spiritual Events
(novel measure) |
Item 21 |
0.45 |
0.46 |
0.20 |
| Spiritual Events
(novel measure) |
Item 22 |
0.49 |
0.51 |
0.23 |
| Hallucinations
(Morrison et al., 2000) |
Item 1 |
0.15 |
0.21 |
0.29 |
| Hallucinations
(Morrison et al., 2000) |
Item 2 |
0.19 |
0.24 |
0.19 |
| Hallucinations
(Morrison et al., 2000) |
Item 3 |
0.15 |
0.14 |
0.24 |
| Hallucinations
(Morrison et al., 2000) |
Item 4 |
0.10 |
0.12 |
0.26 |
| Hallucinations
(Morrison et al., 2000) |
Item 5 |
0.27 |
0.26 |
0.36 |
| Hallucinations
(Morrison et al., 2000) |
Item 6 |
0.23 |
0.25 |
0.21 |
| Paranormal
(Thalborne & Delin, 1993) |
Item 1 |
0.24 |
0.16 |
0.13 |
| Paranormal
(Thalborne & Delin, 1993) |
Item 2 |
0.19 |
0.19 |
0.21 |
| Paranormal
(Thalborne & Delin, 1993) |
Item 3 |
0.27 |
0.26 |
0.16 |
| Paranormal
(Thalborne & Delin, 1993) |
Item 4 |
0.21 |
0.18 |
0.19 |
| Paranormal
(Thalborne & Delin, 1993) |
Item 5 |
0.29 |
0.19 |
0.22 |
| Paranormal
(Thalborne & Delin, 1993) |
Item 6 |
0.26 |
0.23 |
0.29 |
| Paranormal
(Thalborne & Delin, 1993) |
Item 7 |
0.24 |
0.20 |
0.26 |
# collapse_rows(1)
By country, version 1 (standardized within country, correlate across)
d4_different_bycountry <- d4 %>%
select(p7_ctry, p7_subj, por_score_std2, pv_score_std2, abs_score_std2) %>%
full_join(d4_byquestion %>%
select(-scale) %>%
group_by(p7_ctry, question) %>%
# standardize responses by country and question
mutate(response = scale(response)) %>%
spread(question, response) %>%
select(p7_subj, s4_var_dse, s4_var_spev, s4_var_hall, s4_var_para))
Adding missing grouping variables: `p7_ctry`
Joining, by = c("p7_ctry", "p7_subj")
d4_different_bycountry_cor <- d4_different_bycountry %>%
select(-p7_ctry, -p7_subj) %>%
# unite(p7_ctry.p7_subj, p7_ctry, p7_subj, sep = "_") %>%
# column_to_rownames("p7_ctry.p7_subj") %>%
cor(use = "pairwise.complete") %>%
data.frame() %>%
rownames_to_column("var1") %>%
gather(var2, cor, -var1)
d4_different_bycountry_cor2 <- d4_different_bycountry_cor %>%
filter(grepl("score", var1),
!grepl("score", var2)) %>%
mutate(var1 = factor(
var1,
levels = c("por_score_std2", "pv_score_std2", "abs_score_std2"),
labels = c("Porosity Scale", "Porosity Vignettes", "Absorption"))) %>%
left_join(d4_byquestion %>%
distinct(scale, question),
by = c("var2" = "question")) %>%
distinct() %>%
mutate(scale = factor(
scale,
levels = c("dse_score", "spev_score", "hall_score", "para_score"),
labels = c("Daily Spiritual Experiences\n(Underwood & Teresi, 2002)",
"Spiritual Events\n(novel measure)",
"Hallucinations\n(Morrison et al., 2000)",
"Paranormal\n(Thalborne & Delin, 1993)")),
var2_lab = factor(var2,
levels = c(s4_var_dse, s4_var_spev, s4_var_hall, s4_var_para),
labels = c(paste("Item", 1:length(s4_var_dse)),
paste("Item", 1:length(s4_var_spev)),
paste("Item", 1:length(s4_var_hall)),
paste("Item", 1:length(s4_var_para))))) %>%
rename(predictor = var1, experience = var2, experience_lab = var2_lab)
d4_different_bycountry_cor_top4 <- d4_different_bycountry_cor2 %>%
group_by(predictor) %>%
top_n(4, cor) %>%
arrange(predictor, desc(cor))
d4_different_bycountry_cor_top4_spev <- d4_different_bycountry_cor2 %>%
filter(grepl("Spiritual Events", scale)) %>%
group_by(predictor) %>%
top_n(4, cor) %>%
arrange(predictor, desc(cor))
d4_different_bycountry_cor_top4_dse <- d4_different_bycountry_cor2 %>%
filter(grepl("Daily Spiritual Experiences", scale)) %>%
group_by(predictor) %>%
top_n(4, cor) %>%
arrange(predictor, desc(cor))
d4_different_bycountry_cor2 %>%
left_join(d4_different_bycountry_cor_top4 %>% mutate(top4 = "bold")) %>%
mutate(top4 = case_when(is.na(top4) ~ "plain", TRUE ~ top4)) %>%
ggplot(aes(x = predictor, y = reorder(experience_lab, desc(experience_lab)),
fill = cor, label = format(round(cor, 2), nsmall = 2))) +
facet_grid(scale ~ ., scales = "free", space = "free") +
geom_tile(aes(size = top4),
color = "black", show.legend = T) +
geom_text(aes(fontface = top4),
size = 3) +
scale_fill_distiller(palette = "RdYlBu", limits = c(-1, 1),
guide = guide_colorbar(barwidth = 10, barheight = 0.5)) +
scale_size_manual(values = c(0.5, 0.05)) +
theme_minimal() +
theme(legend.position = "bottom") +
labs(x = "Predictor", y = "Experience Item", fill = "Pearson's r") +
guides(size = "none")
Joining, by = c("predictor", "experience", "cor", "scale", "experience_lab")

By country, version 2 (standardized within country, correlate within)
d4_different_bycountry2 <- d4 %>%
select(p7_ctry, p7_subj, por_score_std2, pv_score_std2, abs_score_std2) %>%
full_join(d4_byquestion %>%
select(-scale) %>%
group_by(p7_ctry, question) %>%
# standardize responses by country and question
mutate(response = scale(response)) %>%
ungroup() %>%
spread(question, response) %>%
select(p7_subj, s4_var_dse, s4_var_spev, s4_var_hall, s4_var_para))
Joining, by = "p7_subj"
d4_different_bycountry2_cor_us <- d4_different_bycountry2 %>%
filter(p7_ctry == "US") %>%
select(-p7_ctry, -p7_subj) %>%
# unite(p7_ctry.p7_subj, p7_ctry, p7_subj, sep = "_") %>%
# column_to_rownames("p7_ctry.p7_subj") %>%
cor(use = "pairwise.complete") %>%
data.frame() %>%
rownames_to_column("var1") %>%
gather(var2, cor, -var1)
d4_different_bycountry2_cor_gh <- d4_different_bycountry2 %>%
filter(p7_ctry == "Ghana") %>%
select(-p7_ctry, -p7_subj) %>%
# unite(p7_ctry.p7_subj, p7_ctry, p7_subj, sep = "_") %>%
# column_to_rownames("p7_ctry.p7_subj") %>%
cor(use = "pairwise.complete") %>%
data.frame() %>%
rownames_to_column("var1") %>%
gather(var2, cor, -var1)
d4_different_bycountry2_cor_th <- d4_different_bycountry2 %>%
filter(p7_ctry == "Thailand") %>%
select(-p7_ctry, -p7_subj) %>%
# unite(p7_ctry.p7_subj, p7_ctry, p7_subj, sep = "_") %>%
# column_to_rownames("p7_ctry.p7_subj") %>%
cor(use = "pairwise.complete") %>%
data.frame() %>%
rownames_to_column("var1") %>%
gather(var2, cor, -var1)
d4_different_bycountry2_cor_ch <- d4_different_bycountry2 %>%
filter(p7_ctry == "China") %>%
select(-p7_ctry, -p7_subj) %>%
# unite(p7_ctry.p7_subj, p7_ctry, p7_subj, sep = "_") %>%
# column_to_rownames("p7_ctry.p7_subj") %>%
cor(use = "pairwise.complete") %>%
data.frame() %>%
rownames_to_column("var1") %>%
gather(var2, cor, -var1)
the standard deviation is zero
d4_different_bycountry2_cor_vt <- d4_different_bycountry2 %>%
filter(p7_ctry == "Vanuatu") %>%
select(-p7_ctry, -p7_subj) %>%
# unite(p7_ctry.p7_subj, p7_ctry, p7_subj, sep = "_") %>%
# column_to_rownames("p7_ctry.p7_subj") %>%
cor(use = "pairwise.complete") %>%
data.frame() %>%
rownames_to_column("var1") %>%
gather(var2, cor, -var1)
d4_different_bycountry2_cor <- bind_rows(
d4_different_bycountry2_cor_us %>% mutate(country = "US"),
d4_different_bycountry2_cor_gh %>% mutate(country = "Ghana"),
d4_different_bycountry2_cor_th %>% mutate(country = "Thailand"),
d4_different_bycountry2_cor_ch %>% mutate(country = "China"),
d4_different_bycountry2_cor_vt %>% mutate(country = "Vanuatu"))
d4_different_bycountry2_cor2 <- d4_different_bycountry2_cor %>%
filter(grepl("score", var1),
!grepl("score", var2)) %>%
mutate(country = factor(country, levels = levels_country)) %>%
mutate(var1 = factor(
var1,
levels = c("por_score_std2", "pv_score_std2", "abs_score_std2"),
labels = c("Porosity Scale", "Porosity Vignettes", "Absorption"))) %>%
left_join(d4_byquestion %>%
distinct(scale, question),
by = c("var2" = "question")) %>%
distinct() %>%
mutate(scale = factor(
scale,
levels = c("dse_score", "spev_score", "hall_score", "para_score"),
labels = c("Daily Spiritual Experiences\n(Underwood & Teresi, 2002)",
"Spiritual Events\n(novel measure)",
"Hallucinations\n(Morrison et al., 2000)",
"Paranormal\n(Thalborne & Delin, 1993)")),
var2_lab = factor(var2,
levels = c(s4_var_dse, s4_var_spev, s4_var_hall, s4_var_para),
labels = c(paste("Item", 1:length(s4_var_dse)),
paste("Item", 1:length(s4_var_spev)),
paste("Item", 1:length(s4_var_hall)),
paste("Item", 1:length(s4_var_para))))) %>%
rename(predictor = var1, experience = var2, experience_lab = var2_lab)
d4_different_bycountry2_cor_top4 <- d4_different_bycountry2_cor2 %>%
group_by(predictor, country) %>%
top_n(4, cor) %>%
arrange(predictor, desc(cor))
d4_different_bycountry2_cor_top4_spev <- d4_different_bycountry2_cor2 %>%
filter(grepl("Spiritual Events", scale)) %>%
group_by(predictor, country) %>%
top_n(4, cor) %>%
arrange(predictor, desc(cor))
d4_different_bycountry2_cor_top4_dse <- d4_different_bycountry2_cor2 %>%
filter(grepl("Daily Spiritual Experiences", scale)) %>%
group_by(predictor, country) %>%
top_n(4, cor) %>%
arrange(predictor, desc(cor))
d4_different_bycountry2_cor2 %>%
left_join(d4_different_bycountry2_cor_top4 %>% mutate(top4 = "bold")) %>%
mutate(top4 = case_when(is.na(top4) ~ "plain", TRUE ~ top4)) %>%
ggplot(aes(x = country, y = reorder(experience_lab, desc(experience_lab)),
fill = cor, label = format(round(cor, 2), nsmall = 2))) +
facet_grid(scale ~ predictor, scales = "free", space = "free") +
geom_tile(aes(size = top4),
color = "black", show.legend = T) +
geom_text(aes(fontface = top4),
size = 3) +
scale_fill_distiller(palette = "RdYlBu", limits = c(-1, 1),
guide = guide_colorbar(barwidth = 10, barheight = 0.5)) +
scale_size_manual(values = c(0.5, 0.05)) +
theme_minimal() +
theme(legend.position = "bottom",
axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1)) +
labs(x = "Country", y = "Experience Item", fill = "Pearson's r") +
guides(size = "none")
Joining, by = c("predictor", "experience", "cor", "country", "scale", "experience_lab")

d4 %>%
select(p7_ctry, p7_subj, ends_with("_std")) %>%
gather(scale, score, ends_with("std")) %>%
filter(scale == "dse_score_std") %>%
ggplot(aes(x = p7_ctry, y = score, color = p7_ctry)) +
geom_jitter(height = 0, alpha = 0.2) +
geom_pointrange(data = . %>%
distinct(p7_ctry, p7_subj, score) %>%
group_by(p7_ctry) %>%
multi_boot_standard(col = "score", na.rm = T),
aes(y = mean, ymin = ci_lower, ymax = ci_lower),
color = "black") +
scale_color_brewer(palette = "Dark2")

d4 %>%
select(p7_ctry, p7_subj, ends_with("_std")) %>%
gather(scale, score, ends_with("std")) %>%
filter(scale == "dse_score_std") %>%
distinct(p7_ctry, p7_subj, score) %>%
group_by(p7_ctry) %>%
multi_boot_standard(col = "score", na.rm = T) %>%
ungroup() %>%
ggplot(aes(x = p7_ctry, y = mean, ymin = ci_lower, ymax = ci_upper)) +
geom_pointrange() +
ylim(-2, 2)

d4 %>%
select(p7_ctry, p7_subj, ends_with("_std")) %>%
gather(scale, score, ends_with("std")) %>%
filter(scale == "dse_score_std") %>%
distinct(p7_ctry, p7_subj, score) %>%
group_by(p7_ctry) %>%
summarise(mean = mean(score, na.rm = T),
sd = sd(score, na.rm = T),
lower = mean - sd,
upper = mean + sd) %>%
ggplot(aes(x = p7_ctry, y = mean, ymin = lower, ymax = upper)) +
geom_pointrange() +
ylim(-2, 2)

LS0tCnRpdGxlOiAiU3R1ZHkgNDogRXh0cmEgYW5hbHlzZXMgKG5vdCByZXBvcnRlZCkiCnN1YnRpdGxlOiAiTHVocm1hbm4sIFdlaXNtYW4sIGV0IGFsLiIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdGhlbWU6IGZsYXRseQogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKLS0tCgpJbiB0aGlzIG5vdGVib29rLCB3ZSBjb25kdWN0ZWQgZXh0cmEgYW5hbHlzZXMgKG5vdCByZXBvcnRlZCkgZm9yIFN0dWR5IDQ6IENvbmZpcm1hdG9yeSB3b3JrIHdpdGggdW5kZXJncmFkdWF0ZXMuCgpgYGB7cn0Kc291cmNlKCIuLi8uLi9zY3JpcHRzX2dlbmVyYWwvZGVwZW5kZW5jaWVzLlIiKQpzb3VyY2UoIi4uLy4uL3NjcmlwdHNfZ2VuZXJhbC9jdXN0b21fZnVucy5SIikKc291cmNlKCIuLi8uLi9zY3JpcHRzX2dlbmVyYWwvdmFyX3JlY29kZV9jb250cmFzdC5SIikKc291cmNlKCIuLi9zY3JpcHRzX3M0L3M0X3Zhcl9ncm91cHMuUiIpCnNvdXJjZSgiLi4vLi4vc2NyaXB0c19nZW5lcmFsL2RhdGFfbG9hZC5SIikKYGBgCgpgYGB7cn0KZDRfbG9uZyA8LSBkNCAlPiUKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgCiAgICAgICAgIHBvcl9zY29yZV9zdGQsIHB2X3Njb3JlX3N0ZCwgYWJzX3Njb3JlX3N0ZCwgZHNlX3Njb3JlX3N0ZCwgc3Bldl9zY29yZV9zdGQpICU+JQogIGdhdGhlcihzcGlyaXRfc2NhbGUsIHNwaXJpdF9zY29yZV9zdGQsIAogICAgICAgICBjKGRzZV9zY29yZV9zdGQsIHNwZXZfc2NvcmVfc3RkKSkgJT4lCiAgbXV0YXRlKHNwaXJpdF9zY2FsZSA9IGZhY3RvcihzcGlyaXRfc2NhbGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiZHNlX3Njb3JlX3N0ZCIsICJzcGV2X3Njb3JlX3N0ZCIpKSkKCmNvbnRyYXN0cyhkNF9sb25nJHA3X2N0cnkpIDwtIGNvbnRyYXN0c19jb3VudHJ5OyBjb250cmFzdHMoZDRfbG9uZyRwN19jdHJ5KQpjb250cmFzdHMoZDRfbG9uZyRzcGlyaXRfc2NhbGUpIDwtIGNiaW5kKCJfc3BldiIgPSBjKC0xLCAxKSk7IGNvbnRyYXN0cyhkNF9sb25nJHNwaXJpdF9zY2FsZSkKYGBgCgojIyBBdHRlbXB0aW5nIHRvIGZpdCBtb3JlIGNvbXBsZXggcmFuZG9tIGVmZmVjdHMgc3RydWN0dXJlcwoKYGBge3J9CiMgbW9yZSBjb21wbGV4IHJhbmRvbSBlZmZlY3RzIHN0cnVjdHVyZXM6IE5PVCBSRVBPUlRFRAojIG5vdGU6IG5ldmVyIGxvb2tpbmcgZm9yIGludGVyY2VwdHMgKHJhbmRvbSBvciBmaXhlZCkgYnkgc2NhbGUsIGJlY2F1c2Ugc3RhbmRhcmRpemVkCnIxYSA8LSBsbWVyKHNwaXJpdF9zY29yZV9zdGQgfiAxICsgYWJzX3Njb3JlX3N0ZCArCiAgICAgICAgICAgICAgKDEgfCBwN19jdHJ5L3A3X3N1YmopICsKICAgICAgICAgICAgICAoMCArIGFic19zY29yZV9zdGQgfCBwN19jdHJ5KSArCiAgICAgICAgICAgICAgKDAgKyBhYnNfc2NvcmVfc3RkIHwgc3Bpcml0X3NjYWxlKSwKICAgICAgICAgICAgZGF0YSA9IGQ0X2xvbmcpICMgc2luZ3VsYXIKCnIxYiA8LSBsbWVyKHNwaXJpdF9zY29yZV9zdGQgfiAxICsgYWJzX3Njb3JlX3N0ZCArCiAgICAgICAgICAgICAgKDEgfCBwN19jdHJ5L3A3X3N1YmopICsKICAgICAgICAgICAgICAoMCArIGFic19zY29yZV9zdGQgfCBwN19jdHJ5KSwKICAgICAgICAgICAgZGF0YSA9IGQ0X2xvbmcpICMgc2luZ3VsYXIKCnIxYyA8LSBsbWVyKHNwaXJpdF9zY29yZV9zdGQgfiAxICsgYWJzX3Njb3JlX3N0ZCArCiAgICAgICAgICAgICAgKDEgfCBwN19jdHJ5L3A3X3N1YmopICsKICAgICAgICAgICAgICAoMCArIGFic19zY29yZV9zdGQgfCBzcGlyaXRfc2NhbGUpLAogICAgICAgICAgICBkYXRhID0gZDRfbG9uZykgIyBmYWlsZWQgdG8gY29udmVyZ2UKCnIxZCA8LSBsbWVyKHNwaXJpdF9zY29yZV9zdGQgfiBhYnNfc2NvcmVfc3RkICsgCiAgICAgICAgICAgICAgKDAgKyBhYnNfc2NvcmVfc3RkIHwgcDdfY3RyeSkgKwogICAgICAgICAgICAgICgwICsgYWJzX3Njb3JlX3N0ZCB8IHNwaXJpdF9zY2FsZSksCiAgICAgICAgICAgIGRhdGEgPSBkNF9sb25nKSAjIGZpbmUsIGJ1dCBkb2Vzbid0IHJlZmxlY3QgcmVwZWF0ZWQgbWVhc3VyZXMgZGVzaWduCgpyMWUgPC0gbG1lcihzcGlyaXRfc2NvcmVfc3RkIH4gMSArIGFic19zY29yZV9zdGQgKwogICAgICAgICAgICAgICgxICsgYWJzX3Njb3JlX3N0ZCB8IHA3X2N0cnkpLCAjIHNpbmd1bGFyCiAgICAgICAgICAgICMgKDEgKyBhYnNfc2NvcmVfc3RkIHx8IHA3X2N0cnkpLCAjIGZhaWxlZCB0byBjb252ZXJnZQogICAgICAgICAgICBkYXRhID0gZDRfbG9uZykgIyBzaW5ndWxhcgoKcjFmIDwtIGxtZXIoc3Bpcml0X3Njb3JlX3N0ZCB+IDEgKyBhYnNfc2NvcmVfc3RkICsKICAgICAgICAgICAgICAoMSB8IHA3X2N0cnkvcDdfc3ViaiksCiAgICAgICAgICAgIGRhdGEgPSBkNF9sb25nKSAjIGZpbmUsIGJ1dCBkb2Vzbid0IGFjY291bnQgZm9yIHR3byBzY2FsZXMKCnIxZyA8LSBsbWVyKHNwaXJpdF9zY29yZV9zdGQgfiAxICsgYWJzX3Njb3JlX3N0ZCArCiAgICAgICAgICAgICAgKDAgKyBhYnNfc2NvcmVfc3RkIHwgc3Bpcml0X3NjYWxlKSwKICAgICAgICAgICAgZGF0YSA9IGQ0X2xvbmcpICMgb3ZlcnBhcmFtZXRlcml6ZWQ6IG9ubHkgMSBkZiBmb3IgdGVzdGluZyBtYWluIGVmZmVjdCBvZiBhYnNfc2NvcmUKCnIxaCA8LSBsbWVyKHNwaXJpdF9zY29yZV9zdGQgfiAxICsgYWJzX3Njb3JlX3N0ZCArCiAgICAgICAgICAgICAgKDEgKyBhYnNfc2NvcmVfc3RkIHwgcDdfY3RyeSkgKyAoMSB8IHA3X3N1YmopLAogICAgICAgICAgICBkYXRhID0gZDRfbG9uZykgIyBzaW5ndWxhcgpgYGAKCmBgYHtyfQpyMWlfZHNlIDwtIGxtZXIoZHNlX3Njb3JlX3N0ZCB+IGFic19zY29yZV9zdGQgKwogICAgICAgICAgICAgICAgICAoMSArIGFic19zY29yZV9zdGQgfCBwN19jdHJ5KSwgZDQpICMgc2luZ3VsYXIKCnIxaV9zcGV2IDwtIGxtZXIoc3Bldl9zY29yZV9zdGQgfiBhYnNfc2NvcmVfc3RkICsKICAgICAgICAgICAgICAgICAgICgxICsgYWJzX3Njb3JlX3N0ZCB8IHA3X2N0cnkpLCBkNCkgIyBzaW5ndWxhcgpgYGAKCgoKIyMgUHJpbWFyeSBhbmFseXNpcwoKIyMjIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcwoKYGBge3J9CnIxX2RzZSA8LSBsbWVyKGRzZV9zY29yZV9zdGQgfiBhYnNfc2NvcmVfc3RkICsgCiAgICAgICAgICAgICAgICAgKDEgKyBhYnNfc2NvcmVfc3RkIHx8IHA3X2N0cnkpLCBkNCkKc3VtbWFyeShyMV9kc2UpCmBgYAoKYGBge3J9CnJzcXVhcmVkKHIxX2RzZSkKYGBgCgpgYGB7cn0KcmVndGFiX2Z1bihyMV9kc2UpICU+JSByZWd0YWJfc3R5bGVfZnVuKHJvd19lbXBoID0gMikKYGBgCgpgYGB7cn0KIyByZWd0YWJfcmFuX2Z1bihyMV9kc2UpICU+JQojICAgbXV0YXRlKEdyb3VwID0gY2FzZV93aGVuKGlzLm5hKEdyb3VwKSB+ICJQYXJ0aWNpcGFudCwgbmVzdGVkIHdpdGhpbiBwN19jdHJ5IiwKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gYXMuY2hhcmFjdGVyKEdyb3VwKSksCiMgICAgICAgICAgR3JvdXAgPSBmYWN0b3IoR3JvdXAsIGxldmVscyA9IGMoInA3X2N0cnkiLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFydGljaXBhbnQsIG5lc3RlZCB3aXRoaW4gcDdfY3RyeSIsIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZXNpZHVhbCIpKSkgJT4lCiMgICBhcnJhbmdlKEdyb3VwKSAlPiUKIyAgIGthYmxlKGFsaWduID0gInIiKSAlPiUKIyAgIGthYmxlX3N0eWxpbmcoZm9udF9zaXplID0gMTYpICU+JQojICAgcm93X3NwZWMoMTpucm93KHJlZ3RhYl9yYW5fZnVuKHIxX2RzZSkpLCBjb2xvciA9ICJibGFjayIpCmBgYAoKIyMjIFNwaXJpdHVhbCBFdmVudHMKCmBgYHtyfQpyMV9zcGV2IDwtIGxtZXIoc3Bldl9zY29yZV9zdGQgfiBhYnNfc2NvcmVfc3RkICsgCiAgICAgICAgICAgICAgICAgICgxICsgYWJzX3Njb3JlX3N0ZCB8fCBwN19jdHJ5KSwgZDQpCnN1bW1hcnkocjFfc3BldikKYGBgCgpgYGB7cn0KcnNxdWFyZWQocjFfc3BldikKYGBgCgpgYGB7cn0KcmVndGFiX2Z1bihyMV9zcGV2KSAlPiUgcmVndGFiX3N0eWxlX2Z1bihyb3dfZW1waCA9IDIpCmBgYAoKYGBge3J9CiMgcmVndGFiX3Jhbl9mdW4ocjFfc3BldikgJT4lCiMgICBtdXRhdGUoR3JvdXAgPSBjYXNlX3doZW4oaXMubmEoR3JvdXApIH4gIlBhcnRpY2lwYW50LCBuZXN0ZWQgd2l0aGluIHA3X2N0cnkiLAojICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBhcy5jaGFyYWN0ZXIoR3JvdXApKSwKIyAgICAgICAgICBHcm91cCA9IGZhY3RvcihHcm91cCwgbGV2ZWxzID0gYygicDdfY3RyeSIsIAojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJ0aWNpcGFudCwgbmVzdGVkIHdpdGhpbiBwN19jdHJ5IiwgCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlc2lkdWFsIikpKSAlPiUKIyAgIGFycmFuZ2UoR3JvdXApICU+JQojICAga2FibGUoYWxpZ24gPSAiciIpICU+JQojICAga2FibGVfc3R5bGluZyhmb250X3NpemUgPSAxNikgJT4lCiMgICByb3dfc3BlYygxOm5yb3cocmVndGFiX3Jhbl9mdW4ocjFfc3BldikpLCBjb2xvciA9ICJibGFjayIpCmBgYAoKIyMgcDdfY3RyeSBhcyBmaXhlZCBlZmZlY3QKCiMjIyBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMKCmBgYHtyfQpyMl9kc2UgPC0gbG0oZHNlX3Njb3JlX3N0ZCB+IGFic19zY29yZV9zdGQgKiBwN19jdHJ5LCBkNCkKc3VtbWFyeShyMl9kc2UpCmBgYAoKYGBge3J9CnJzcXVhcmVkKHIyX2RzZSkKYGBgCgpgYGB7cn0KcmVndGFiX2Z1bihyMl9kc2UsIAogICAgICAgICAgIGNvdW50cnlfdmFyMSA9ICJwN19jdHJ5X2doIiwgCiAgICAgICAgICAgY291bnRyeV92YXIyID0gInA3X2N0cnlfdGgiLCAKICAgICAgICAgICBjb3VudHJ5X3ZhcjMgPSAicDdfY3RyeV9jaCIsIAogICAgICAgICAgIGNvdW50cnlfdmFyNCA9ICJwN19jdHJ5X3Z0IikgJT4lIAogIHJlZ3RhYl9zdHlsZV9mdW4ocm93X2VtcGggPSAyKQpgYGAKCgojIyMgU3Bpcml0dWFsIEV2ZW50cwoKYGBge3J9CnIyX3NwZXYgPC0gbG0oc3Bldl9zY29yZV9zdGQgfiBhYnNfc2NvcmVfc3RkICogcDdfY3RyeSwgZDQpCnN1bW1hcnkocjJfc3BldikKYGBgCgpgYGB7cn0KcnNxdWFyZWQocjJfc3BldikKYGBgCgpgYGB7cn0KcmVndGFiX2Z1bihyMl9zcGV2LAogICAgICAgICAgIGNvdW50cnlfdmFyMSA9ICJwN19jdHJ5X2doIiwgCiAgICAgICAgICAgY291bnRyeV92YXIyID0gInA3X2N0cnlfdGgiLCAKICAgICAgICAgICBjb3VudHJ5X3ZhcjMgPSAicDdfY3RyeV9jaCIsIAogICAgICAgICAgIGNvdW50cnlfdmFyNCA9ICJwN19jdHJ5X3Z0IikgJT4lCiAgcmVndGFiX3N0eWxlX2Z1bihyb3dfZW1waCA9IDIpCmBgYAoKCgojIFBvcm9zaXR5IGFuZCBhYnNvcnB0aW9uIGRpZmZlcmVudGlhbGx5IHByZWRpY3RpbmcgaW5kaXZpZHVhbCBleHRyYW9yZGluYXJ5IGV4cGVyaWVuY2VzCgpgYGB7cn0KZDRfZGlmZmVyZW50IDwtIGQ0ICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBwb3Jfc2NvcmVfc3RkLCBwdl9zY29yZV9zdGQsIGFic19zY29yZV9zdGQpICU+JQogIGZ1bGxfam9pbihkNF9ieXF1ZXN0aW9uICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoLXNjYWxlKSAlPiUKICAgICAgICAgICAgICAjIHN0YW5kYXJkaXplIHJlc3BvbnNlcyBieSBxdWVzdGlvbiAoY29sbGFwc2luZyBhY3Jvc3MgY291bnRyaWVzKQogICAgICAgICAgICAgIGdyb3VwX2J5KHF1ZXN0aW9uKSAlPiUKICAgICAgICAgICAgICBtdXRhdGUocmVzcG9uc2UgPSBzY2FsZShyZXNwb25zZSkpICU+JQogICAgICAgICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICAgICAgICBzcHJlYWQocXVlc3Rpb24sIHJlc3BvbnNlKSAlPiUKICAgICAgICAgICAgICBzZWxlY3QocDdfc3ViaiwgczRfdmFyX2RzZSwgczRfdmFyX3NwZXYsIHM0X3Zhcl9oYWxsLCBzNF92YXJfcGFyYSkpCmBgYAoKYGBge3J9CmQ0X2RpZmZlcmVudF9jb3IgPC0gZDRfZGlmZmVyZW50ICU+JQogIHNlbGVjdCgtcDdfY3RyeSwgLXA3X3N1YmopICU+JQogICMgdW5pdGUocDdfY3RyeS5wN19zdWJqLCBwN19jdHJ5LCBwN19zdWJqLCBzZXAgPSAiXyIpICU+JQogICMgY29sdW1uX3RvX3Jvd25hbWVzKCJwN19jdHJ5LnA3X3N1YmoiKSAlPiUKICBjb3IodXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigidmFyMSIpICU+JQogIGdhdGhlcih2YXIyLCBjb3IsIC12YXIxKQpgYGAKCmBgYHtyfQpkNF9kaWZmZXJlbnRfY29yMiA8LSBkNF9kaWZmZXJlbnRfY29yICU+JQogIGZpbHRlcihncmVwbCgic2NvcmUiLCB2YXIxKSwKICAgICAgICAgIWdyZXBsKCJzY29yZSIsIHZhcjIpKSAlPiUKICBtdXRhdGUodmFyMSA9IGZhY3RvcigKICAgIHZhcjEsIAogICAgbGV2ZWxzID0gYygicG9yX3Njb3JlX3N0ZCIsICJwdl9zY29yZV9zdGQiLCAiYWJzX3Njb3JlX3N0ZCIpLAogICAgbGFiZWxzID0gYygiUG9yb3NpdHkgU2NhbGUiLCAiUG9yb3NpdHkgVmlnbmV0dGVzIiwgIkFic29ycHRpb24iKSkpICU+JQogIGxlZnRfam9pbihkNF9ieXF1ZXN0aW9uICU+JSAKICAgICAgICAgICAgICBkaXN0aW5jdChzY2FsZSwgcXVlc3Rpb24pLCAKICAgICAgICAgICAgYnkgPSBjKCJ2YXIyIiA9ICJxdWVzdGlvbiIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcigKICAgIHNjYWxlLAogICAgbGV2ZWxzID0gYygiZHNlX3Njb3JlIiwgInNwZXZfc2NvcmUiLCAiaGFsbF9zY29yZSIsICJwYXJhX3Njb3JlIiksCiAgICBsYWJlbHMgPSBjKCJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXNcbihVbmRlcndvb2QgJiBUZXJlc2ksIDIwMDIpIiwgCiAgICAgICAgICAgICAgICJTcGlyaXR1YWwgRXZlbnRzXG4obm92ZWwgbWVhc3VyZSkiLAogICAgICAgICAgICAgICAiSGFsbHVjaW5hdGlvbnNcbihNb3JyaXNvbiBldCBhbC4sIDIwMDApIiwgCiAgICAgICAgICAgICAgICJQYXJhbm9ybWFsXG4oVGhhbGJvcm5lICYgRGVsaW4sIDE5OTMpIikpLAogICAgdmFyMl9sYWIgPSBmYWN0b3IodmFyMiwKICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoczRfdmFyX2RzZSwgczRfdmFyX3NwZXYsIHM0X3Zhcl9oYWxsLCBzNF92YXJfcGFyYSksCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKHBhc3RlKCJJdGVtIiwgMTpsZW5ndGgoczRfdmFyX2RzZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZSgiSXRlbSIsIDE6bGVuZ3RoKHM0X3Zhcl9zcGV2KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlKCJJdGVtIiwgMTpsZW5ndGgoczRfdmFyX2hhbGwpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUoIkl0ZW0iLCAxOmxlbmd0aChzNF92YXJfcGFyYSkpKSkpICU+JQogIHJlbmFtZShwcmVkaWN0b3IgPSB2YXIxLCBleHBlcmllbmNlID0gdmFyMiwgZXhwZXJpZW5jZV9sYWIgPSB2YXIyX2xhYikKYGBgCgpgYGB7cn0KZDRfZGlmZmVyZW50X2Nvcl90b3A0IDwtIGQ0X2RpZmZlcmVudF9jb3IyICU+JQogIGdyb3VwX2J5KHByZWRpY3RvcikgJT4lCiAgdG9wX24oNCwgY29yKSAlPiUKICBhcnJhbmdlKHByZWRpY3RvciwgZGVzYyhjb3IpKQpkNF9kaWZmZXJlbnRfY29yX3RvcDQgJT4lIGthYmxlKGRpZ2l0cyA9IDIpICU+JSBrYWJsZV9zdHlsaW5nKCkgJT4lIGNvbGxhcHNlX3Jvd3MoMSkKCmQ0X2RpZmZlcmVudF9jb3JfdG9wNF9zcGV2IDwtIGQ0X2RpZmZlcmVudF9jb3IyICU+JQogIGZpbHRlcihncmVwbCgiU3Bpcml0dWFsIEV2ZW50cyIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkocHJlZGljdG9yKSAlPiUKICB0b3Bfbig0LCBjb3IpICU+JQogIGFycmFuZ2UocHJlZGljdG9yLCBkZXNjKGNvcikpCiMgZDRfZGlmZmVyZW50X2Nvcl90b3A0X3NwZXYgJT4lIGthYmxlKGRpZ2l0cyA9IDIpICU+JSBrYWJsZV9zdHlsaW5nKCkgJT4lIGNvbGxhcHNlX3Jvd3MoMSkKCmQ0X2RpZmZlcmVudF9jb3JfdG9wNF9kc2UgPC0gZDRfZGlmZmVyZW50X2NvcjIgJT4lCiAgZmlsdGVyKGdyZXBsKCJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHByZWRpY3RvcikgJT4lCiAgdG9wX24oNCwgY29yKSAlPiUKICBhcnJhbmdlKHByZWRpY3RvciwgZGVzYyhjb3IpKQojIGQ0X2RpZmZlcmVudF9jb3JfdG9wNF9kc2UgJT4lIGthYmxlKGRpZ2l0cyA9IDIpICU+JSBrYWJsZV9zdHlsaW5nKCkgJT4lIGNvbGxhcHNlX3Jvd3MoMSkKCmQ0X2RpZmZlcmVudF9jb3JfdG9wNF9oYWxsIDwtIGQ0X2RpZmZlcmVudF9jb3IyICU+JQogIGZpbHRlcihncmVwbCgiSGFsbHVjaW5hdGlvbnMiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHByZWRpY3RvcikgJT4lCiAgdG9wX24oNCwgY29yKSAlPiUKICBhcnJhbmdlKHByZWRpY3RvciwgZGVzYyhjb3IpKQojIGQ0X2RpZmZlcmVudF9jb3JfdG9wNF9oYWxsICU+JSBrYWJsZShkaWdpdHMgPSAyKSAlPiUga2FibGVfc3R5bGluZygpICU+JSBjb2xsYXBzZV9yb3dzKDEpCgpkNF9kaWZmZXJlbnRfY29yX3RvcDRfcGFyYSA8LSBkNF9kaWZmZXJlbnRfY29yMiAlPiUKICBmaWx0ZXIoZ3JlcGwoIlBhcmFub3JtYWwiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHByZWRpY3RvcikgJT4lCiAgdG9wX24oNCwgY29yKSAlPiUKICBhcnJhbmdlKHByZWRpY3RvciwgZGVzYyhjb3IpKQojIGQ0X2RpZmZlcmVudF9jb3JfdG9wNF9wYXJhICU+JSBrYWJsZShkaWdpdHMgPSAyKSAlPiUga2FibGVfc3R5bGluZygpICU+JSBjb2xsYXBzZV9yb3dzKDEpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDIuNSwgZmlnLmFzcCA9IDIuNX0KZDRfZGlmZmVyZW50X2NvcjIgJT4lCiAgbGVmdF9qb2luKGQ0X2RpZmZlcmVudF9jb3JfdG9wNCAlPiUgbXV0YXRlKHRvcDQgPSAiYm9sZCIpKSAlPiUKICBtdXRhdGUodG9wNCA9IGNhc2Vfd2hlbihpcy5uYSh0b3A0KSB+ICJwbGFpbiIsIFRSVUUgfiB0b3A0KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcHJlZGljdG9yLCB5ID0gcmVvcmRlcihleHBlcmllbmNlX2xhYiwgZGVzYyhleHBlcmllbmNlX2xhYikpLCAKICAgICAgICAgICAgIGZpbGwgPSBjb3IsIGxhYmVsID0gZm9ybWF0KHJvdW5kKGNvciwgMiksIG5zbWFsbCA9IDIpKSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiAuLCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKGFlcyhzaXplID0gdG9wNCksIAogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gVCkgKwogIGdlb21fdGV4dChhZXMoZm9udGZhY2UgPSB0b3A0KSwgCiAgICAgICAgICAgIHNpemUgPSAzKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZFlsQnUiLCBsaW1pdHMgPSBjKC0xLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcndpZHRoID0gMTAsIGJhcmhlaWdodCA9IDAuNSkpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKDAuNSwgMC4wNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh4ID0gIlByZWRpY3RvciIsIHkgPSAiRXhwZXJpZW5jZSBJdGVtIiwgZmlsbCA9ICJQZWFyc29uJ3MgciIpICsKICBndWlkZXMoc2l6ZSA9ICJub25lIikKYGBgCgpgYGB7cn0KZDRfZGlmZmVyZW50X2NvcjIgJT4lIAogIHNlbGVjdChzY2FsZSwgZXhwZXJpZW5jZV9sYWIsIHByZWRpY3RvciwgY29yKSAlPiUKICBzcHJlYWQocHJlZGljdG9yLCBjb3IpICU+JQogIHJlbmFtZShTY2FsZSA9IHNjYWxlLCBJdGVtID0gZXhwZXJpZW5jZV9sYWIpICU+JQogIGthYmxlKGRpZ2l0cyA9IDIpICU+JQogIGthYmxlX3N0eWxpbmcoKSAjICU+JQogICMgY29sbGFwc2Vfcm93cygxKQpgYGAKCgojIyBCeSBjb3VudHJ5LCB2ZXJzaW9uIDEgKHN0YW5kYXJkaXplZCB3aXRoaW4gY291bnRyeSwgY29ycmVsYXRlIGFjcm9zcykKCmBgYHtyfQpkNF9kaWZmZXJlbnRfYnljb3VudHJ5IDwtIGQ0ICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBwb3Jfc2NvcmVfc3RkMiwgcHZfc2NvcmVfc3RkMiwgYWJzX3Njb3JlX3N0ZDIpICU+JQogIGZ1bGxfam9pbihkNF9ieXF1ZXN0aW9uICU+JSAKICAgICAgICAgICAgICBzZWxlY3QoLXNjYWxlKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCBxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgIyBzdGFuZGFyZGl6ZSByZXNwb25zZXMgYnkgY291bnRyeSBhbmQgcXVlc3Rpb24KICAgICAgICAgICAgICBtdXRhdGUocmVzcG9uc2UgPSBzY2FsZShyZXNwb25zZSkpICU+JQogICAgICAgICAgICAgIHNwcmVhZChxdWVzdGlvbiwgcmVzcG9uc2UpICU+JQogICAgICAgICAgICAgIHNlbGVjdChwN19zdWJqLCBzNF92YXJfZHNlLCBzNF92YXJfc3BldiwgczRfdmFyX2hhbGwsIHM0X3Zhcl9wYXJhKSkKYGBgCgpgYGB7cn0KZDRfZGlmZmVyZW50X2J5Y291bnRyeV9jb3IgPC0gZDRfZGlmZmVyZW50X2J5Y291bnRyeSAlPiUKICBzZWxlY3QoLXA3X2N0cnksIC1wN19zdWJqKSAlPiUKICAjIHVuaXRlKHA3X2N0cnkucDdfc3ViaiwgcDdfY3RyeSwgcDdfc3Viaiwgc2VwID0gIl8iKSAlPiUKICAjIGNvbHVtbl90b19yb3duYW1lcygicDdfY3RyeS5wN19zdWJqIikgJT4lCiAgY29yKHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZSIpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInZhcjEiKSAlPiUKICBnYXRoZXIodmFyMiwgY29yLCAtdmFyMSkKYGBgCgpgYGB7cn0KZDRfZGlmZmVyZW50X2J5Y291bnRyeV9jb3IyIDwtIGQ0X2RpZmZlcmVudF9ieWNvdW50cnlfY29yICU+JQogIGZpbHRlcihncmVwbCgic2NvcmUiLCB2YXIxKSwKICAgICAgICAgIWdyZXBsKCJzY29yZSIsIHZhcjIpKSAlPiUKICBtdXRhdGUodmFyMSA9IGZhY3RvcigKICAgIHZhcjEsIAogICAgbGV2ZWxzID0gYygicG9yX3Njb3JlX3N0ZDIiLCAicHZfc2NvcmVfc3RkMiIsICJhYnNfc2NvcmVfc3RkMiIpLAogICAgbGFiZWxzID0gYygiUG9yb3NpdHkgU2NhbGUiLCAiUG9yb3NpdHkgVmlnbmV0dGVzIiwgIkFic29ycHRpb24iKSkpICU+JQogIGxlZnRfam9pbihkNF9ieXF1ZXN0aW9uICU+JSAKICAgICAgICAgICAgICBkaXN0aW5jdChzY2FsZSwgcXVlc3Rpb24pLCAKICAgICAgICAgICAgYnkgPSBjKCJ2YXIyIiA9ICJxdWVzdGlvbiIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcigKICAgIHNjYWxlLAogICAgbGV2ZWxzID0gYygiZHNlX3Njb3JlIiwgInNwZXZfc2NvcmUiLCAiaGFsbF9zY29yZSIsICJwYXJhX3Njb3JlIiksCiAgICBsYWJlbHMgPSBjKCJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXNcbihVbmRlcndvb2QgJiBUZXJlc2ksIDIwMDIpIiwgCiAgICAgICAgICAgICAgICJTcGlyaXR1YWwgRXZlbnRzXG4obm92ZWwgbWVhc3VyZSkiLAogICAgICAgICAgICAgICAiSGFsbHVjaW5hdGlvbnNcbihNb3JyaXNvbiBldCBhbC4sIDIwMDApIiwgCiAgICAgICAgICAgICAgICJQYXJhbm9ybWFsXG4oVGhhbGJvcm5lICYgRGVsaW4sIDE5OTMpIikpLAogICAgdmFyMl9sYWIgPSBmYWN0b3IodmFyMiwKICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoczRfdmFyX2RzZSwgczRfdmFyX3NwZXYsIHM0X3Zhcl9oYWxsLCBzNF92YXJfcGFyYSksCiAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKHBhc3RlKCJJdGVtIiwgMTpsZW5ndGgoczRfdmFyX2RzZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZSgiSXRlbSIsIDE6bGVuZ3RoKHM0X3Zhcl9zcGV2KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlKCJJdGVtIiwgMTpsZW5ndGgoczRfdmFyX2hhbGwpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUoIkl0ZW0iLCAxOmxlbmd0aChzNF92YXJfcGFyYSkpKSkpICU+JQogIHJlbmFtZShwcmVkaWN0b3IgPSB2YXIxLCBleHBlcmllbmNlID0gdmFyMiwgZXhwZXJpZW5jZV9sYWIgPSB2YXIyX2xhYikKYGBgCgpgYGB7cn0KZDRfZGlmZmVyZW50X2J5Y291bnRyeV9jb3JfdG9wNCA8LSBkNF9kaWZmZXJlbnRfYnljb3VudHJ5X2NvcjIgJT4lCiAgZ3JvdXBfYnkocHJlZGljdG9yKSAlPiUKICB0b3Bfbig0LCBjb3IpICU+JQogIGFycmFuZ2UocHJlZGljdG9yLCBkZXNjKGNvcikpCgpkNF9kaWZmZXJlbnRfYnljb3VudHJ5X2Nvcl90b3A0X3NwZXYgPC0gZDRfZGlmZmVyZW50X2J5Y291bnRyeV9jb3IyICU+JQogIGZpbHRlcihncmVwbCgiU3Bpcml0dWFsIEV2ZW50cyIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkocHJlZGljdG9yKSAlPiUKICB0b3Bfbig0LCBjb3IpICU+JQogIGFycmFuZ2UocHJlZGljdG9yLCBkZXNjKGNvcikpCgpkNF9kaWZmZXJlbnRfYnljb3VudHJ5X2Nvcl90b3A0X2RzZSA8LSBkNF9kaWZmZXJlbnRfYnljb3VudHJ5X2NvcjIgJT4lCiAgZmlsdGVyKGdyZXBsKCJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHByZWRpY3RvcikgJT4lCiAgdG9wX24oNCwgY29yKSAlPiUKICBhcnJhbmdlKHByZWRpY3RvciwgZGVzYyhjb3IpKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAyLjUsIGZpZy5hc3AgPSAyLjV9CmQ0X2RpZmZlcmVudF9ieWNvdW50cnlfY29yMiAlPiUKICBsZWZ0X2pvaW4oZDRfZGlmZmVyZW50X2J5Y291bnRyeV9jb3JfdG9wNCAlPiUgbXV0YXRlKHRvcDQgPSAiYm9sZCIpKSAlPiUKICBtdXRhdGUodG9wNCA9IGNhc2Vfd2hlbihpcy5uYSh0b3A0KSB+ICJwbGFpbiIsIFRSVUUgfiB0b3A0KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcHJlZGljdG9yLCB5ID0gcmVvcmRlcihleHBlcmllbmNlX2xhYiwgZGVzYyhleHBlcmllbmNlX2xhYikpLCAKICAgICAgICAgICAgIGZpbGwgPSBjb3IsIGxhYmVsID0gZm9ybWF0KHJvdW5kKGNvciwgMiksIG5zbWFsbCA9IDIpKSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiAuLCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKGFlcyhzaXplID0gdG9wNCksIAogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gVCkgKwogIGdlb21fdGV4dChhZXMoZm9udGZhY2UgPSB0b3A0KSwgCiAgICAgICAgICAgIHNpemUgPSAzKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZFlsQnUiLCBsaW1pdHMgPSBjKC0xLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcndpZHRoID0gMTAsIGJhcmhlaWdodCA9IDAuNSkpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKDAuNSwgMC4wNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh4ID0gIlByZWRpY3RvciIsIHkgPSAiRXhwZXJpZW5jZSBJdGVtIiwgZmlsbCA9ICJQZWFyc29uJ3MgciIpICsKICBndWlkZXMoc2l6ZSA9ICJub25lIikKYGBgCgojIyBCeSBjb3VudHJ5LCB2ZXJzaW9uIDIgKHN0YW5kYXJkaXplZCB3aXRoaW4gY291bnRyeSwgY29ycmVsYXRlIHdpdGhpbikKCmBgYHtyfQpkNF9kaWZmZXJlbnRfYnljb3VudHJ5MiA8LSBkNCAlPiUKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgcG9yX3Njb3JlX3N0ZDIsIHB2X3Njb3JlX3N0ZDIsIGFic19zY29yZV9zdGQyKSAlPiUKICBmdWxsX2pvaW4oZDRfYnlxdWVzdGlvbiAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KC1zY2FsZSkgJT4lCiAgICAgICAgICAgICAgZ3JvdXBfYnkocDdfY3RyeSwgcXVlc3Rpb24pICU+JQogICAgICAgICAgICAgICMgc3RhbmRhcmRpemUgcmVzcG9uc2VzIGJ5IGNvdW50cnkgYW5kIHF1ZXN0aW9uCiAgICAgICAgICAgICAgbXV0YXRlKHJlc3BvbnNlID0gc2NhbGUocmVzcG9uc2UpKSAlPiUKICAgICAgICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgICAgICAgc3ByZWFkKHF1ZXN0aW9uLCByZXNwb25zZSkgJT4lCiAgICAgICAgICAgICAgc2VsZWN0KHA3X3N1YmosIHM0X3Zhcl9kc2UsIHM0X3Zhcl9zcGV2LCBzNF92YXJfaGFsbCwgczRfdmFyX3BhcmEpKQpgYGAKCmBgYHtyfQpkNF9kaWZmZXJlbnRfYnljb3VudHJ5Ml9jb3JfdXMgPC0gZDRfZGlmZmVyZW50X2J5Y291bnRyeTIgJT4lCiAgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikgJT4lCiAgc2VsZWN0KC1wN19jdHJ5LCAtcDdfc3ViaikgJT4lCiAgIyB1bml0ZShwN19jdHJ5LnA3X3N1YmosIHA3X2N0cnksIHA3X3N1YmosIHNlcCA9ICJfIikgJT4lCiAgIyBjb2x1bW5fdG9fcm93bmFtZXMoInA3X2N0cnkucDdfc3ViaiIpICU+JQogIGNvcih1c2UgPSAicGFpcndpc2UuY29tcGxldGUiKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJ2YXIxIikgJT4lCiAgZ2F0aGVyKHZhcjIsIGNvciwgLXZhcjEpCgpkNF9kaWZmZXJlbnRfYnljb3VudHJ5Ml9jb3JfZ2ggPC0gZDRfZGlmZmVyZW50X2J5Y291bnRyeTIgJT4lCiAgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikgJT4lCiAgc2VsZWN0KC1wN19jdHJ5LCAtcDdfc3ViaikgJT4lCiAgIyB1bml0ZShwN19jdHJ5LnA3X3N1YmosIHA3X2N0cnksIHA3X3N1YmosIHNlcCA9ICJfIikgJT4lCiAgIyBjb2x1bW5fdG9fcm93bmFtZXMoInA3X2N0cnkucDdfc3ViaiIpICU+JQogIGNvcih1c2UgPSAicGFpcndpc2UuY29tcGxldGUiKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJ2YXIxIikgJT4lCiAgZ2F0aGVyKHZhcjIsIGNvciwgLXZhcjEpCgpkNF9kaWZmZXJlbnRfYnljb3VudHJ5Ml9jb3JfdGggPC0gZDRfZGlmZmVyZW50X2J5Y291bnRyeTIgJT4lCiAgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikgJT4lCiAgc2VsZWN0KC1wN19jdHJ5LCAtcDdfc3ViaikgJT4lCiAgIyB1bml0ZShwN19jdHJ5LnA3X3N1YmosIHA3X2N0cnksIHA3X3N1YmosIHNlcCA9ICJfIikgJT4lCiAgIyBjb2x1bW5fdG9fcm93bmFtZXMoInA3X2N0cnkucDdfc3ViaiIpICU+JQogIGNvcih1c2UgPSAicGFpcndpc2UuY29tcGxldGUiKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJ2YXIxIikgJT4lCiAgZ2F0aGVyKHZhcjIsIGNvciwgLXZhcjEpCgpkNF9kaWZmZXJlbnRfYnljb3VudHJ5Ml9jb3JfY2ggPC0gZDRfZGlmZmVyZW50X2J5Y291bnRyeTIgJT4lCiAgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikgJT4lCiAgc2VsZWN0KC1wN19jdHJ5LCAtcDdfc3ViaikgJT4lCiAgIyB1bml0ZShwN19jdHJ5LnA3X3N1YmosIHA3X2N0cnksIHA3X3N1YmosIHNlcCA9ICJfIikgJT4lCiAgIyBjb2x1bW5fdG9fcm93bmFtZXMoInA3X2N0cnkucDdfc3ViaiIpICU+JQogIGNvcih1c2UgPSAicGFpcndpc2UuY29tcGxldGUiKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJ2YXIxIikgJT4lCiAgZ2F0aGVyKHZhcjIsIGNvciwgLXZhcjEpCgpkNF9kaWZmZXJlbnRfYnljb3VudHJ5Ml9jb3JfdnQgPC0gZDRfZGlmZmVyZW50X2J5Y291bnRyeTIgJT4lCiAgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSAlPiUKICBzZWxlY3QoLXA3X2N0cnksIC1wN19zdWJqKSAlPiUKICAjIHVuaXRlKHA3X2N0cnkucDdfc3ViaiwgcDdfY3RyeSwgcDdfc3Viaiwgc2VwID0gIl8iKSAlPiUKICAjIGNvbHVtbl90b19yb3duYW1lcygicDdfY3RyeS5wN19zdWJqIikgJT4lCiAgY29yKHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZSIpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInZhcjEiKSAlPiUKICBnYXRoZXIodmFyMiwgY29yLCAtdmFyMSkKYGBgCgpgYGB7cn0KZDRfZGlmZmVyZW50X2J5Y291bnRyeTJfY29yIDwtIGJpbmRfcm93cygKICBkNF9kaWZmZXJlbnRfYnljb3VudHJ5Ml9jb3JfdXMgJT4lIG11dGF0ZShjb3VudHJ5ID0gIlVTIiksCiAgZDRfZGlmZmVyZW50X2J5Y291bnRyeTJfY29yX2doICU+JSBtdXRhdGUoY291bnRyeSA9ICJHaGFuYSIpLAogIGQ0X2RpZmZlcmVudF9ieWNvdW50cnkyX2Nvcl90aCAlPiUgbXV0YXRlKGNvdW50cnkgPSAiVGhhaWxhbmQiKSwKICBkNF9kaWZmZXJlbnRfYnljb3VudHJ5Ml9jb3JfY2ggJT4lIG11dGF0ZShjb3VudHJ5ID0gIkNoaW5hIiksCiAgZDRfZGlmZmVyZW50X2J5Y291bnRyeTJfY29yX3Z0ICU+JSBtdXRhdGUoY291bnRyeSA9ICJWYW51YXR1IikpCmBgYAoKYGBge3J9CmQ0X2RpZmZlcmVudF9ieWNvdW50cnkyX2NvcjIgPC0gZDRfZGlmZmVyZW50X2J5Y291bnRyeTJfY29yICU+JQogIGZpbHRlcihncmVwbCgic2NvcmUiLCB2YXIxKSwKICAgICAgICAgIWdyZXBsKCJzY29yZSIsIHZhcjIpKSAlPiUKICBtdXRhdGUoY291bnRyeSA9IGZhY3Rvcihjb3VudHJ5LCBsZXZlbHMgPSBsZXZlbHNfY291bnRyeSkpICU+JQogIG11dGF0ZSh2YXIxID0gZmFjdG9yKAogICAgdmFyMSwgCiAgICBsZXZlbHMgPSBjKCJwb3Jfc2NvcmVfc3RkMiIsICJwdl9zY29yZV9zdGQyIiwgImFic19zY29yZV9zdGQyIiksCiAgICBsYWJlbHMgPSBjKCJQb3Jvc2l0eSBTY2FsZSIsICJQb3Jvc2l0eSBWaWduZXR0ZXMiLCAiQWJzb3JwdGlvbiIpKSkgJT4lCiAgbGVmdF9qb2luKGQ0X2J5cXVlc3Rpb24gJT4lIAogICAgICAgICAgICAgIGRpc3RpbmN0KHNjYWxlLCBxdWVzdGlvbiksIAogICAgICAgICAgICBieSA9IGMoInZhcjIiID0gInF1ZXN0aW9uIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKAogICAgc2NhbGUsCiAgICBsZXZlbHMgPSBjKCJkc2Vfc2NvcmUiLCAic3Bldl9zY29yZSIsICJoYWxsX3Njb3JlIiwgInBhcmFfc2NvcmUiKSwKICAgIGxhYmVscyA9IGMoIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlc1xuKFVuZGVyd29vZCAmIFRlcmVzaSwgMjAwMikiLCAKICAgICAgICAgICAgICAgIlNwaXJpdHVhbCBFdmVudHNcbihub3ZlbCBtZWFzdXJlKSIsCiAgICAgICAgICAgICAgICJIYWxsdWNpbmF0aW9uc1xuKE1vcnJpc29uIGV0IGFsLiwgMjAwMCkiLCAKICAgICAgICAgICAgICAgIlBhcmFub3JtYWxcbihUaGFsYm9ybmUgJiBEZWxpbiwgMTk5MykiKSksCiAgICB2YXIyX2xhYiA9IGZhY3Rvcih2YXIyLAogICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYyhzNF92YXJfZHNlLCBzNF92YXJfc3BldiwgczRfdmFyX2hhbGwsIHM0X3Zhcl9wYXJhKSwKICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMocGFzdGUoIkl0ZW0iLCAxOmxlbmd0aChzNF92YXJfZHNlKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3RlKCJJdGVtIiwgMTpsZW5ndGgoczRfdmFyX3NwZXYpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUoIkl0ZW0iLCAxOmxlbmd0aChzNF92YXJfaGFsbCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXN0ZSgiSXRlbSIsIDE6bGVuZ3RoKHM0X3Zhcl9wYXJhKSkpKSkgJT4lCiAgcmVuYW1lKHByZWRpY3RvciA9IHZhcjEsIGV4cGVyaWVuY2UgPSB2YXIyLCBleHBlcmllbmNlX2xhYiA9IHZhcjJfbGFiKQpgYGAKCmBgYHtyfQpkNF9kaWZmZXJlbnRfYnljb3VudHJ5Ml9jb3JfdG9wNCA8LSBkNF9kaWZmZXJlbnRfYnljb3VudHJ5Ml9jb3IyICU+JQogIGdyb3VwX2J5KHByZWRpY3RvciwgY291bnRyeSkgJT4lCiAgdG9wX24oNCwgY29yKSAlPiUKICBhcnJhbmdlKHByZWRpY3RvciwgZGVzYyhjb3IpKQoKZDRfZGlmZmVyZW50X2J5Y291bnRyeTJfY29yX3RvcDRfc3BldiA8LSBkNF9kaWZmZXJlbnRfYnljb3VudHJ5Ml9jb3IyICU+JQogIGZpbHRlcihncmVwbCgiU3Bpcml0dWFsIEV2ZW50cyIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkocHJlZGljdG9yLCBjb3VudHJ5KSAlPiUKICB0b3Bfbig0LCBjb3IpICU+JQogIGFycmFuZ2UocHJlZGljdG9yLCBkZXNjKGNvcikpCgpkNF9kaWZmZXJlbnRfYnljb3VudHJ5Ml9jb3JfdG9wNF9kc2UgPC0gZDRfZGlmZmVyZW50X2J5Y291bnRyeTJfY29yMiAlPiUKICBmaWx0ZXIoZ3JlcGwoIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkocHJlZGljdG9yLCBjb3VudHJ5KSAlPiUKICB0b3Bfbig0LCBjb3IpICU+JQogIGFycmFuZ2UocHJlZGljdG9yLCBkZXNjKGNvcikpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAxLjI1fQpkNF9kaWZmZXJlbnRfYnljb3VudHJ5Ml9jb3IyICU+JQogIGxlZnRfam9pbihkNF9kaWZmZXJlbnRfYnljb3VudHJ5Ml9jb3JfdG9wNCAlPiUgbXV0YXRlKHRvcDQgPSAiYm9sZCIpKSAlPiUKICBtdXRhdGUodG9wNCA9IGNhc2Vfd2hlbihpcy5uYSh0b3A0KSB+ICJwbGFpbiIsIFRSVUUgfiB0b3A0KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY291bnRyeSwgeSA9IHJlb3JkZXIoZXhwZXJpZW5jZV9sYWIsIGRlc2MoZXhwZXJpZW5jZV9sYWIpKSwgCiAgICAgICAgICAgICBmaWxsID0gY29yLCBsYWJlbCA9IGZvcm1hdChyb3VuZChjb3IsIDIpLCBuc21hbGwgPSAyKSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcHJlZGljdG9yLCBzY2FsZXMgPSAiZnJlZSIsIHNwYWNlID0gImZyZWUiKSArCiAgZ2VvbV90aWxlKGFlcyhzaXplID0gdG9wNCksIAogICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIHNob3cubGVnZW5kID0gVCkgKwogIGdlb21fdGV4dChhZXMoZm9udGZhY2UgPSB0b3A0KSwgCiAgICAgICAgICAgIHNpemUgPSAzKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZFlsQnUiLCBsaW1pdHMgPSBjKC0xLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKGJhcndpZHRoID0gMTAsIGJhcmhlaWdodCA9IDAuNSkpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKDAuNSwgMC4wNSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnMoeCA9ICJDb3VudHJ5IiwgeSA9ICJFeHBlcmllbmNlIEl0ZW0iLCBmaWxsID0gIlBlYXJzb24ncyByIikgKwogIGd1aWRlcyhzaXplID0gIm5vbmUiKQpgYGAKCgoKYGBge3J9CmQ0ICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBlbmRzX3dpdGgoIl9zdGQiKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgZW5kc193aXRoKCJzdGQiKSkgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJkc2Vfc2NvcmVfc3RkIikgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoaGVpZ2h0ID0gMCwgYWxwaGEgPSAwLjIpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IC4gJT4lIAogICAgICAgICAgICAgICAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHNjb3JlKSAlPiUKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5KSAlPiUgCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiLCBuYS5ybSA9IFQpLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX2xvd2VyKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKQoKZDQgJT4lCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGVuZHNfd2l0aCgiX3N0ZCIpKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCBlbmRzX3dpdGgoInN0ZCIpKSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZV9zY29yZV9zdGQiKSAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3Viaiwgc2NvcmUpICU+JSAKICBncm91cF9ieShwN19jdHJ5KSAlPiUgCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCB5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpKSArCiAgZ2VvbV9wb2ludHJhbmdlKCkgKwogIHlsaW0oLTIsIDIpCgpkNCAlPiUKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgZW5kc193aXRoKCJfc3RkIikpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIGVuZHNfd2l0aCgic3RkIikpICU+JQogIGZpbHRlcihzY2FsZSA9PSAiZHNlX3Njb3JlX3N0ZCIpICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBzY29yZSkgJT4lIAogIGdyb3VwX2J5KHA3X2N0cnkpICU+JSAKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oc2NvcmUsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHNkID0gc2Qoc2NvcmUsIG5hLnJtID0gVCksCiAgICAgICAgICAgIGxvd2VyID0gbWVhbiAtIHNkLAogICAgICAgICAgICB1cHBlciA9IG1lYW4gKyBzZCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IG1lYW4sIHltaW4gPSBsb3dlciwgeW1heCA9IHVwcGVyKSkgKwogIGdlb21fcG9pbnRyYW5nZSgpICsKICB5bGltKC0yLCAyKQpgYGAKCg==